
static void zclTrans_afConfirm(zb_uint8_t param)
{
  transItem_t item;

  zb_ret_t status = zb_buf_get_status(param);
  zb_buf_free(param);

  if (STATUS_SUCCESS != queuePeek(&TransToZbQueue, &item))
    return;
 
  zclTrans_queuePop(&TransToZbQueue);
  
  //send next packeet
  zclTransEvents |= TRANS_TO_ZB_EVT;
  SemaphoreP_post(zclTransSem);
}


static ComStatus_t zclTrans_send_(uint16_t shortAddr, void *pData, uint16_t len, uint8_t disableRsp, void *pCbArg)
{
  uint16_t frameCnt = 0;
  uint8_t zbRet;
  zb_uint8_t* ptr;
  
  if (ZB_IN_NETWORK != nwkMgmt_getNwkState())
    return STATUS_ERR_FATAL;
    
  zb_bufid_t param;
  param = zb_buf_get_out();
  if (param == 0)
    return STATUS_NO_BUFFERS;
  
  frameCnt = ZB_ZCL_GET_SEQ_NUM();

  ZB_ZCL_TRANSPORT_INIT_REQ(param, ptr, \
                            disableRsp, \
                            frameCnt,\
                            0);
  ZB_ZCL_PACKET_PUT_DATA_N(ptr, pData, len);
  
  if (RET_OK == (zbRet = zb_zcl_finish_and_send_packet_new(param, ptr, \
                          (const zb_addr_u *)(const void *)(&(shortAddr)),\
                          ZB_APS_ADDR_MODE_16_ENDP_PRESENT,\
                          ZB_DST_ENDPOINT,\
                          ZB_SWITCH_ENDPOINT,\
                          ZB_AF_HA_PROFILE_ID,\
                          ZB_ZCL_CLUSTER_ID_TRANSPORT,\
                          zclTrans_afConfirm,
                          ZB_FALSE, ZB_TRUE, 0)))
  {
    //LOG_COMMON_LN(LOG_DEBUG, "zclTrans");
  }
  else
  {
    zb_buf_free(param);
    return STATUS_ERR_FATAL;
  }

  return STATUS_SUCCESS;
}
